iT邦幫忙

2022 iThome 鐵人賽

DAY 19
4
AI & Data

OH~ AI 原來如此,互助就此開始!系列 第 19

Day 18. 深度學習模型 - RNN(一)

  • 分享至 

  • xImage
  •  

語言模型(Language Models)是判斷一定長度的文字出現在句子的機率,生活中的語言模型你一定用過,而且每天有數十億人在用,可以算是最常用的 NLP 應用程式。

https://ithelp.ithome.com.tw/upload/images/20221003/20150622fcx5kjqXgc.jpg
ーー 手機上的輸入法,根據你輸入的單字推測你下一個要輸入的字

自然語言處理(NLP,Natural Language Processing)是指讓機器處理及運用人類的語言。

循環神經網路(RNN,Recurrent Neural Network) 是和 CNN 並列深度學習的兩大基本模型,如果說 CNN 是處理圖像的模型,RNN 可以說是處理語言的模型,主要是處理有序列關係或者說是有時間性質的資料,比如說:

  • 時間順序的數字,例如冰淇淋販賣數量
    夏天賣得比冬天好,白天天氣熱賣得比晚上好等等。
    https://ithelp.ithome.com.tw/upload/images/20220827/20150622qDQqkDZpKT.jpg

  • 文本資料
    文章的前後句關係,句子構成的前後單字。
    https://ithelp.ithome.com.tw/upload/images/20220921/20150622nTLy8yyAjA.jpg

  • 影像或語音
    影像也屬於前後連續的圖片,語音也如同文字一樣有時間的前後關係。

時間序列資料(Time Series Data)

剛剛舉的例子,和時間有前後關係的資料我們稱作時間序列資料
除了本身就是數據的資料,其他資料要怎麼轉成讓電腦看得懂的輸入資料呢?

語音的資料

聲音主要是靠空氣中聲音的震動產生的類比訊號,所以需要轉換成電腦看得懂的數位資料:

  1. 透過脈衝編碼調變(PCM,Pulse-code modul)轉換類比訊號到數位資料。
    https://ithelp.ithome.com.tw/upload/images/20220922/20150622biN7o5ykJK.jpg
    ーー出處:PCM

  2. 使用快速傅里葉變換 (FFT,Fast Fourier transform) 將音頻轉換為周波數頻譜(spectrum)
    https://ithelp.ithome.com.tw/upload/images/20220922/20150622vYGxn8rQyG.png
    ーー左:音頻信號,右:周波數頻譜。出處:FFT

  3. 最後透過梅爾頻率倒譜係數(MFCC,Mel-Frequency Cepstrum
    Coefficients) 轉換成特徵向量。

而要將聲音轉換成單詞可以透過隱藏式馬可夫模型(Hidden Markov model,HMM),透過音素(Phoneme)特徵向量,對照著音素列-單詞的字典,找出機率最高的幾種單詞,再根據前後文的順序經由語言模型找出最有可能的單詞。

音素是人類能夠區別意義的最小聲音單位。

附帶一提, DeepMind 創造的 WaveNet,可透過文本(Text)產生語音,不過是透過 CNN 而非 RNN 技術。

文本的資料

n 元語法(n-gram)

連續出現的 n 個單詞叫做 n 元語法,假設有一個句子:「AI 原來如此」。

  • 1個單詞為1組叫做 1-gram(uni-gram)
    ['AI', '原來', '如此']
  • 2個連續單詞為1組叫做 2-gram(bi-gram)
    ['AI 原來', '原來如此']
  • 3個連續單詞為1組叫做 3-gram(tri-gram)
    ['AI 原來如此']

n-gram 可以拿來預測接下來出現的單詞,比方說 3-gram,「AI 原來__」,如果本系列的文章出現在語料庫的機率夠高,可以知道後面會是「如此」。是一種常見的語言模型

獨熱向量(one-hot vector)

而 n-gram 可以將其轉成獨熱向量用數字來表示文字。

Day 14 有提過只有一個 1 其他為 0 稱為獨熱。

假設我們有3個單詞的詞彙表,其獨熱向量會是這樣:
'AI' = [1 0 0]
'原來' = [0 1 0]
'如此' = [0 0 1]

詞袋(BoW,Bag of Words)

透過獨熱向量可以做加法計算出每組的出現頻率。

'AI原來如此' = [1 0 0] + [0 1 0] + [0 0 1] =  [1 1 1]
'AI原來原來如此' = [1 0 0] + [0 1 0] + [0 1 0] + [0 0 1] =  [1 2 1]

像這樣用加總完的向量表示單詞的出現頻率叫做詞袋(BoW,Bag of Words)。
而 2 個連續單詞的詞袋可以稱做 Bag-of-2-grams,以此類推。透過單詞頻率可以看出每個單詞在文章的重要性。而重要性可以透過 TF-IDF (Term Frequency – Inverse Document Frequency)表示。

名稱 意思 計算範例
TF 某文章出現某單詞的機率 1篇文章1000個單詞,「AI」出現30次=0.03
DF 某單詞出現在各文章的機率 100篇文章有25篇出現 「AI」=0.25
IDF DF 倒數的對數 https://chart.googleapis.com/chart?cht=tx&chl=IDF%20%3D%20log%5Cfrac%7B1%7D%7BDF%7D%20%3D%20log%20%5Cfrac%7B1%7D%7B0.25%7D%20%3D%20log%204%20%3D%202
TF-IDF TF 和 IDF相乘 https://chart.googleapis.com/chart?cht=tx&chl=TF-IDF%3DTF%20%5Ctimes%20IDF%20%3D%200.03%20%5Ctimes%202%20%3D%200.06

早期透過 one-hot vector 可以當作 RNN 的輸入,但是 one-hot vector 和 之前提過的 one-hot encoding 一樣,文章的句子一多,詞彙表的單詞數就增加,one-hot vector會變得非常巨大,產生非常多個 0 (資料稀疏,Data sparsity)並造成維度的詛咒,而且每個單詞獨立存在,看不出和其他單詞的相關性。

單詞的數目多=特徵的數目多=維度的數目多=非常高維

詞嵌入(Word Embedding)

那要怎麼解決這種高維度的問題呢?2013年由 Google 的 Tomas Mikolov 提出的 Word2Vec(word to vector),透過 CBOWSkip-gram ,不只解決高維度的問題,還可以用向量的的距離和位置關係表示出單詞的意思。

  • CBOW(Continuous Bag-of-Words)
    用周邊的字預測某個字。
    AI 原來 __ 互助 就此 開始。
    如左圖:用前後字預測 w(t)。

  • Skip-gram
    用某個字預測周邊的字。
    __ __ 如此 __ __ __
    如右圖:用 w(t) 預測前後字。

https://ithelp.ithome.com.tw/upload/images/20220922/20150622C8gf7LhclD.jpg
ーー出處:Word2Vec 論文

有沒有覺得這個圖似曾相似?沒錯,就是做神經網路的分類問題!以 Skip-gram 為例,拿 w(t) 的 one-hot vector 當輸入去找出其他詞句的出現機率(分類)當輸出。

所以只需要大一點的語料庫,就可以透過文本的分布直接做無監督式學習!實際上拿大量新聞做訓練的 word2vec,將取得的單字關係做主成分分析(PCA)投射到 2 維的話可以呈現下圖單詞之間的關係。

https://ithelp.ithome.com.tw/upload/images/20220922/20150622YCS58YN9z0.jpg
ーー原圖出處:Google Open Source Blog

這種將所有單詞的高維空間嵌入到一個較低維度的連續向量空間(例如上圖的 2 維空間),就叫做詞嵌入,詞嵌入向量是預先訓練好的資料可以作為 RNN 的輸入層。

而透過上圖,還可以藉由向量的加減去捕捉到單詞之間的關係,比方說

巴黎 - 法國 + 波蘭 = 華沙 (Paris - France + Poland = Warsaw)

找到相對於巴黎,波蘭對應的首都是華沙。類似的例子還有鼎鼎有名的

國王 - 男人 + 女人 = 王后 (King - Man + Woman = Queen)

嚴格講起來並沒有完全相等,只是最近的單詞是王后。
另外兩個單詞的相似性可以透過計算兩個向量的餘弦角度(cosine) ,接近 1 代表相似。圖片的特徵向量也可以透過這樣的計算去看圖片相似度。

其他的詞嵌入方法

  • fastText
    2013年 Tomas Mikolov 使用 word2vec為基礎開發出來的手法,
    即便訓練集裡面沒有的單字(OOV,Out Of Vocabulary)也能對應。

  • ELMo(embeddings from language models)
    word2vec 雖然可以看出和其他詞的相關性,卻無法表現出一詞多義的性質,ELMo 透過之後會介紹的 bi-LSTM(雙向 LSTM)可以理解上下文的分布,同一個詞根據不同語意可以有不同的詞嵌入向量。

今天說完了作為輸入的時間序列資料,明天就來介紹 RNN 具體是怎麼做這些資料處理。

立即複習

  1. 可以根據目前輸入的單詞預測下一個詞的模型叫做?
  2. 人類能夠區分聲音意義的最小聲音單位叫做?
  3. 用來表現單詞的出現頻率叫做?
  4. 將所有單詞的高維空間嵌入到一個低維空間的手法叫做?
  5. 單詞的重要性可以透過哪個公式計算?

參考資料


上一篇
Day 17. 深度學習模型 - GAN
下一篇
Day 19. 深度學習模型 - RNN(二)
系列文
OH~ AI 原來如此,互助就此開始!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言